package it.agm.fanta.activity.fragment;

import it.agm.fanta.FantaserviceApp;
import it.agm.fanta.R;
import it.agm.fanta.adapter.FormazioneReadAdapter;
import it.agm.fanta.asynctask.jersey.patch.Callback;
import it.agm.fanta.asynctask.jersey.patch.NetworkHandler;
import it.agm.fanta.constants.Constants;
import it.agm.fanta.model.FormazioneLegaRead;
import it.agm.fanta.model.Giocatore;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
//import it.unisalento.appsalento.adapter.AppelliDettaglioEsameAdapter;
import android.widget.TextView;


public class FormazioneReadFragment extends Fragment {
	public static final String ARG_PLANET_NUMBER = "planet_number";
	private FormazioneReadAdapter adapter = null;
	public FormazioneReadFragment() {

	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
		View rootView = inflater.inflate(R.layout.fragment_formazione_read, container,false);
		//caricaLista();
		updateData(rootView);
		return rootView;
	}

	/**
	 * @param rootView
	 */
	private void updateData(View rootView) {
		rootView.findViewById(R.id.edit_formazione_button).setOnClickListener(
				new View.OnClickListener() {
					@Override
					public void onClick(View view) {
						
						if (FantaserviceApp.formazioneWriteFragment==null){
							FantaserviceApp.formazioneWriteFragment = new FormazioneWriteFragment();
						}
//						App.formazioneWriteragment.caricaLista();
						FormazioneWriteFragment fragment = FantaserviceApp.formazioneWriteFragment;
						FragmentManager fragmentManager = getFragmentManager();
						fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
					}
				});
		if(FantaserviceApp.formazioneReaded != null && FantaserviceApp.lega != null && !FantaserviceApp.formazioneReaded.isEmpty()){
			if(FantaserviceApp.dettaglio != null){
				TextView giornata = (TextView) rootView.findViewById(R.id.giornata);
				giornata.setText(FantaserviceApp.dettaglio.getGiornata() +"°a giornata");
				TextView modulo = (TextView) rootView.findViewById(R.id.modulo);
				modulo.setText(FantaserviceApp.dettaglio.getModulo());
				TextView data = (TextView) rootView.findViewById(R.id.dataInserimento);
				if(FantaserviceApp.dettaglio.getDatainserimento() != null){
					SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
					data.setText(sdf.format(FantaserviceApp.dettaglio.getDatainserimento()));
				}
				
			}
			
	        ListView listView = (ListView) rootView.findViewById(R.id.listViewGiocatoriRosa);
	        
			ArrayList<Giocatore> list = FantaserviceApp.formazioneReaded;
			adapter = new FormazioneReadAdapter(getActivity(), R.layout.row_calciatore_fromazione_read,list);

			listView.setAdapter(adapter);
		}
	}
	
	public void caricaLista(){
		String url = Constants.URL_REST 	+ Constants.SERVICE_FORMAZIONE;
		NetworkHandler networkHandler = NetworkHandler.getInstance();
		
		FormazioneLegaRead[] formazione = null ;
		
			FantaserviceApp.formazioneReaded = null;
			if(NetworkHandler.checkConnection(FantaserviceApp.getAppContext())){
				
				networkHandler.write(url, FormazioneLegaRead[].class, formazione,
					new Callback<FormazioneLegaRead[]>() {
						@Override
						public void callback(FormazioneLegaRead[] formazione) {
							if(formazione != null && formazione.length>0){
								List<Giocatore> list = formazione[0].getCalciatoreFormazioneLega();
								FantaserviceApp.dettaglio = formazione[0].getDettaglioFormazioneLega();
								FantaserviceApp.formazioneReaded= (ArrayList<Giocatore>) list;
								Collections.sort(FantaserviceApp.formazioneReaded, new LineupCustomComparator());
	//							Collections.sort(App.formazioneReaded, new FormazioneCustomComparator());
								try {
								    Thread.sleep(3000);                 //1000 milliseconds is one second.
								} catch(InterruptedException ex) {
								    Thread.currentThread().interrupt();
								}
								FantaserviceApp.formazioneReadFragment.refreshData();
							}
							
						}
					});
			}

	}
	
	
	public void refreshData() {
		updateData(getView());
		adapter.notifyDataSetChanged();
	}
	
	class FormazioneCustomComparator implements Comparator<Giocatore> {
	    @Override
	    public int compare(Giocatore o1, Giocatore o2) {
	    	int retVal = new Integer(o1.getPosizione()).compareTo(new Integer(o2.getPosizione()));
	    	
	    			
	        return retVal;
	    }
	}
	
	class LineupCustomComparator implements Comparator<Giocatore> {
	    @Override
	    public int compare(Giocatore o1, Giocatore o2) {
	    	int retVal = -(new Character(o1.getLineup()).compareTo(new Character(o2.getLineup())));
	    	if (retVal == 0) {
	    		retVal = new Integer(o1.getPosizione()).compareTo(new Integer(o2.getPosizione()));
	        }
	    			
	        return retVal;
	    }
	}
}
